Титановый отвар
RabbitMQ в Docker
5/09/2020

Заметил (к счастью, до релиза в продакшн), что из очереди RabbitMQ пропадают сообщения, начисто, если убить контейнер и создать его снова. Почему -- непонятно: очередь durable, сообщения persistent. В конфиге docker-compose всё прописано как надо, очередь живёт на внешнем томе:

volumes:
- queues:/var/lib/rabbitmq/mnesia

Загадка...

Оказалось, что имя базы mnesia зависит от имени хоста, на котором крутится RabbitMQ. Как только я пересоздаю контейнер, имя хоста меняется, Rabbit ищет базу, не находит, создаёт новую. Вот так всё просто... Одно из решений -- задать RabbitMQ перманентное имя хоста, например, через переменную окружения в том же docker-compose.yaml (rabbit -- это название контейнера):

environment:
- RABBITMQ_NODENAME=project_queue@rabbit